﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Linq;

namespace QldtSdh.GUI.DaoTao
{
    using BLL;
    using DAL;
    using DAL.Models;
    using GUI.Utils;
    using QldtSdh.GUI.Common;
    using QldtSdh.Utils;

    public partial class FormLopHocPhan_ThoiKhoaBieu_SaoChep : QldtSdh.GUI.Common.BaseDialog
    {
        private DateTime _ThuHai;
        private DateTime _ChuNhat;
        private LopHocPhan _LopHocPhan;
        public List<TreeNode> ListOfKetQuaSaoChep { get; private set; }
        public int SoTuanSaoChep { get { return (int)nudSoTuan.Value; } }
        public string HuongSaoChep { get { return cbxHuongSaoChep.SelectedIndex == 0 ? "trước đó" : "sau đó"; } }

        public FormLopHocPhan_ThoiKhoaBieu_SaoChep(LopHocPhan lopHocPhan, DateTime thuHai, DateTime chuNhat)
        {
            InitializeComponent();

            _LopHocPhan = lopHocPhan;
            _ThuHai = thuHai.Date;
            _ChuNhat = chuNhat.Date.Add(new TimeSpan(23, 59, 59));
            lblHeader.Text = string.Format("Sao chép thời khoá biểu tuần {0} ÷ {1} của lớp học phần {2}",
                _ThuHai.ToString("dd/MM/yyyy"), _ChuNhat.ToString("dd/MM/yyyy"), _LopHocPhan.TenLopHocPhanFull);
            cbxHuongSaoChep.SelectedIndex = 1;
            nudSoTuan.Value = 2;
        }

        private void btnDongY_Click(object sender, EventArgs x)
        {
            var lstKq = new List<TreeNode>();
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                var maLopHocPhanGUID = _LopHocPhan.MaLopHocPhanGUID;
                var lst = db.LopHocPhan_ThoiKhoaBieuDbSet
                    .Where(e =>
                        e.MaLopHocPhanGUID == maLopHocPhanGUID &&
                        _ThuHai <= e.NgayHoc && e.NgayHoc <= _ChuNhat)
                    .OrderBy(e => e.NgayHoc)
                    .ThenBy(e => e.BuoiHoc)
                    .ToList();

                var soTuan = (int)nudSoTuan.Value;
                int huongSaoChep = cbxHuongSaoChep.SelectedIndex == 0 ? -1 : 1;
                // sao chép về sau
                for (int i = 1; i <= soTuan; i++)
                {
                    TreeNode nodeTuan = new TreeNode(string.Format("Tuần {0} ÷ {1}", _ThuHai.AddDays(7 * i * huongSaoChep).ToString("dd/MM"), _ChuNhat.AddDays(7 * i * huongSaoChep).ToString("dd/MM")));
                    nodeTuan.ImageIndex = nodeTuan.SelectedImageIndex = 0;
                    lstKq.Add(nodeTuan);
                    foreach (var item in lst)
                    {
                        #region var kq = sao chép item đến mục tương ứng
                        var kq = new KetQuaSaoChep()
                            {
                                MucTKB = new LopHocPhan_ThoiKhoaBieu()
                                {
                                    MaLopHocPhan_ThoiKhoaBieuGUID = System.Guid.NewGuid().ToString(),
                                    MaLopHocPhanGUID = item.MaLopHocPhanGUID,
                                    MaGiangVien = item.MaGiangVien,
                                    GiangVien = BizGiangVien.GetByID2(item.MaGiangVien),
                                    MaPhongHoc = item.MaPhongHoc,
                                    NgayHoc = item.NgayHoc.AddDays(huongSaoChep * 7 * i),
                                    BuoiHoc = item.BuoiHoc,
                                    MoTa = item.MoTa
                                }
                            };
                        try
                        {
                            var gv = BizGiangVien.GetByID2(item.MaGiangVien, db);
                            BizThoiKhoaBieu.InsertThoiKhoaBieu(
                                _LopHocPhan,
                                item.MaGiangVien,
                                gv.MaGiangVienDaoTaoDaiHoc,
                                item.MaPhongHoc,
                                item.NgayHoc.AddDays(7 * i),
                                item.BuoiHoc,
                                item.MoTa,
                                Program.KiemTraThoiKhoaBieuDaiHoc,
                                db);
                            kq.ThanhCong = true;
                        }
                        catch (Exception exc)
                        {
                            kq.ThanhCong = false;
                            kq.MoTaLoi = exc.Message;
                        }
                        #endregion
                        var node = new TreeNode(string.Format("{0} {1} ({2})",
                            BizThoiKhoaBieu.GetStringOfBuoi(kq.MucTKB.BuoiHoc),
                            BizThoiKhoaBieu.GetThuTrongTuan(kq.MucTKB.NgayHoc),
                            kq.MucTKB.NgayHoc.ToString("dd/MM")));
                        node.Tag = kq;
                        node.ImageIndex = node.SelectedImageIndex = kq.ThanhCong ? 1 : 2;
                        nodeTuan.Nodes.Add(node);
                    }
                }

                if (huongSaoChep == 0)
                    lst.Reverse();
            }
            this.ListOfKetQuaSaoChep = lstKq;
            this.DialogResult = System.Windows.Forms.DialogResult.OK;
            this.Close();
        }
    }
}
